[API Gateway] APIキーと使用量プランを使用してアクセス制限を掛ける
はじめに
API Gatewayにアクセス制限を掛ける方法として、APIキーを使う方法があります。ですが単純にAPIとAPIキーを紐付けるのではなく、「使用プラン」を介してAPIとキーは結びつける形となります。今回はその方法について書いてみたいと思います。
手順
1. API GatewayでAPIを作成する
今回、アクセス制限を掛ける対象のAPIを作成します。
API GatewayのAPI作成画面にてAPI名を入力し「APIの作成」ボタンを押下します。
「アクション」より「リソースの作成」を押下し、リソース名を入力して「リソースの作成」ボタンを押下します。
「id」リソースも追加した後、GETメソッドを追加します。
統合レスポンスの本文マッピングテンプレートに返却したいjsonを定義します。
作成したAPIをデプロイします。
$ curl https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/users/100 { id: 100, name: "xxxx" }
curlでAPIを呼び出し、レスポンスが返ってくることを確認します。
2. APIキーを作成する
画面左の「APIキー」より、APIキーを作成します。
「APIキー」横の「表示」リンクをクリックすると表示される値をコピーしておきます。(後ほどcurlによる動作確認時にヘッダーで渡すAPIキーの値となります。)
3. 使用プランを作成する
画面左の「使用プラン」より、使用プランを作成します。
「APIステージの追加」ボタンを押下し、APIをステージを選択してチェックボタンを押下します。
4. APIキーを使用プランに追加する
使用プランの「APIキー」タブを選択し、先に作成したAPIキーを入力してチェックボタンを押下します。
5. アクセス制限を掛ける
API Gatewayで作成したAPIのGETメソッドを選択し、「APIキーの必要性」を「true」に変更します。変更後、再度APIをデプロイします。
動作確認
curlでAPIを呼び出してみます。
$ curl https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/users/100 {"message":"Forbidden"}
アクセスが拒否されました。
先に取っておいたAPIキーを付けて、呼び出してみます。APIキーはヘッダーに「x-api-key」で渡します。
curl https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/users/100 --header "x-api-key:xxxxxxxxxxxxxxxxxxxxxxxx" { id: 100, name: "xxxx" }
今度は無事、取得したいレスポンスを確認することができました。
まとめ
APIキーを用いてのAPI Gatewayのアクセス制限の方法についてでした。何かの役に立てば幸いです。